#ifndef FRAMELESSWINDOW_H
#define FRAMELESSWINDOW_H

#include <QWidget>

/**
 * @brief 此类为基窗口类，完成一些自定义的窗口操作
*/

// 针对9个区域，定义了一个枚举变量； https://scn6tem1mwz6.feishu.cn/next/messenger/
enum Location {
    TOP,
    BOTTOM,
    LEFT,
    RIGHT,
    TOP_LEFT,
    TOP_RIGHT,
    BOTTOM_LEFT,
    BOTTOM_RIGHT,
    CENTER
};

class FramelessWindow : public QWidget
{
    Q_OBJECT
public:
    explicit FramelessWindow(QWidget *parent = nullptr);

signals:

protected:
    void setTitleBarWidgets(QVector<QWidget*> widgets);
    void mousePressEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);

    // 用于设置鼠标追踪
    void setAllWidgetMouseTracking(QWidget* widget);
    bool eventFilter(QObject* target, QEvent* event);
    void setCursorShape(const QPoint& point);
    // 双击标题栏放大
    void mouseDoubleClickEvent(QMouseEvent* event);

private:
    bool leftPressed = false;   // 鼠标左键按下
    bool isPressedInTitle = false;  // 是否在标题栏内按下
    QVector<QWidget*> titleBarWidgets;  // 记录标题栏中的控件

    QPoint pressPos;    // 鼠标事件位置
    QPoint wndPos;  // 当前窗口位置即窗口左上角坐标

    // 拖动缩放
    int padding;        // 边距
    Location hoverPos;  // 鼠标位置
};

#endif // FRAMELESSWINDOW_H
